/**
给你一个二叉树的根节点 root ，返回其最大路径和。
本题中，路径 被定义为一条从树中任意节点出发，沿父节点-子节点连接，达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。
该路径 至少包含一个 节点，且不一定经过根节点。
输入：root = [1,2,3]
输出：6
解释：最优路径是 2 -> 1 -> 3 ，路径和为 2 + 1 + 3 = 6
输入：root = [-10,9,20,null,null,15,7]
输出：42
解释：最优路径是 15 -> 20 -> 7 ，路径和为 15 + 20 + 7 = 42
 */
function maxPathSum(root) {
  let maxSum = Number.MIN_SAFE_INTEGER
  const dfs = (node) => {
    if(!node) return 0
    const left = Math.max(0,dfs(node.left))
    const right = Math.max(0,dfs(node.right))
    maxSum = Math.max(maxSum, left + right + node.val)
    return node.val + Math.max(left, right)
  }
  dfs(root)
  return maxSum
}